package com.heima.article.service.impl;

import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.heima.article.mapper.ApArticleConfigMapper;
import com.heima.article.service.ApArticleConfigService;
import com.heima.model.article.pojos.ApArticleConfig;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

import java.util.Map;

@Service
@Slf4j
@Transactional//开启事务，因为涉及到多张表的更改操作
//这个实现类的主要功能是根据传入的参数来修改文章的配置信息，特别是文章的上下架状态
//这个方法会被调用来更新数据库中ApArticleConfig表的相关记录，以反映文章新的发布状态
//通过@Transactional注解，确保了更新操作在一个事务中完成，保证了数据的一致性和完整性
public class ApArticleConfigServiceImpl extends ServiceImpl<ApArticleConfigMapper, ApArticleConfig> implements ApArticleConfigService {

	/**
	 * 修改文章配置
	 * @param map
	 */
	@Override
	//根据传入的Map参数更新文章配置，这里的Map参数来自kafka消息生产者封装的map对象，是JSON格式
	//该对象在监听器ArticleIsDownListener上被监听后被反序列化为map对象，作为参数传递过来
	public void updateByMap(Map map) {
		//0 下架 1 上架
		//这一步的逻辑是因为数据库中的enable逻辑和我们后端代码的逻辑刚好相反
		//数据库0表示上架，后端中0表示下架，未约定好，所以这里需要逻辑判断
		//在map对象中根据enable获取值，即enable的属性，0或者是1
		Object enable = map.get("enable");
		//定义一个变量isDown，默认为true
		boolean isDown = true;
		if(enable.equals(1)){
			//如果enable字段的值等于1，则将isDown设置为false，表示文章将被上架
			isDown = false;
		}
		//修改文章配置
		update(Wrappers.<ApArticleConfig>lambdaUpdate()
				.eq(ApArticleConfig::getArticleId,map.get("articleId"))
				.set(ApArticleConfig::getIsDown,isDown));

	}
}
